Unity IAPの更新方法
概要
こうしないとインポート時に100%Unity Editorが落ちる、という確証が取れたのでまとめる。
ちなみにこれを実践しても何度か落ちる可能性がある。IAPのアプデしたいだけなんだが(報告中)
1.IAPを使っているコードをコンパイル対象から外す
2.IAPの入っているPlugins/UnityPurchasing フォルダを消す
3.一旦Unity終了、プロジェクト直下のLibraryフォルダを消す
4.Unity起動、ServicesからIAPをImport
5.ServicesからIAPをReimport
6.Plugins/UnityPurchasing フォルダ内にunitypackageができるので、それを使う
こんだけやるとIAPを最新にできる。なぜだ。
1.IAPを使っているコードをコンパイル対象から外す
なんかコンパイラディレクティブとか使って、特定状況下ではPurchasingとそれに依存するコードを丸ごとコンパイル対象から外す、みたいなことをするといいと思う。
Purchasing系に依存してるコードがある状態でIAP更新すると100%エディタが落ちる。
2.IAPの入っているPlugins/UnityPurchasing フォルダを消す
フォルダを消しても依存がないのでコンパイルエラーが出ないはず。
3.一旦Unity終了、プロジェクト直下のLibraryフォルダを消す
Libraryフォルダを消す。これをやらないとやはり落ちる。
4.Unity起動、ServicesからIAPをImport
ログイン済み + IAPをEnableにする、という操作が終わっていればImportやReimportボタンが出る。
押すと、、中確率くらいでUnityEditorが落ちる。
2でフォルダを消しているので、Importになっているはず。
5.ServicesからIAPをReimport
Importが終わったら、再度Services > IAP でReimportを押す
押すと、、中確率くらいでUnityEditorが落ちる。
6.Plugins/UnityPurchasing フォルダ内にunitypackageができるので、それを使う
ここまででPlugins/UnityPurchasingフォルダ下にunitypackageが2つできているはずで、
できていない場合Reimportが足りない。
何を言っているのかわからねーと思うが本当にそう。
Reimportしまくると出てくる。自分は最大3回くらいReimportした。
UnityIAP.unitypackage を使うとこで、正しくいろいろ入った状態のIAPが使えるようになる。
最後に1で立てたdefineとかを消して、元来の機構のコンパイルを通して完了となる。
やらないとどうなるの?
using Unity.Purchasing の内容にストア情報が含まれなかったり StandardPurchasingModule.Instance() のコンパイルが通らなかったりする。
原因は単純で、dllが異なるっぽい。
unitypackageに含まれてるdllが正しい。それ以外はダメ。
楽な方法はないの
UnityIAPを空のプロジェクトに入れて、そこで出てきたunitypackageを対象のプロジェクトに対して使う。
なんでやねんという感じがするが、本当にこれ。
もしかしてAssetStoreの方のやつをそのまま使うと良かったりする?と何回か試したことがあるが、
うまくいったりいかなかったりで再現性がないんで再現性があるこの手法を紹介する。